package com.rui.bridge.main;

import com.rui.bridge.model.Ios;
import com.rui.bridge.model.OperatingSystem;
import com.rui.bridge.obj.Mp4;
import com.rui.bridge.obj.Rmvb;

/**
 * 桥接模式（Bridge Pattern）
 * <p>
 * 桥接模式也称为桥梁模式、接口模式或者柄体（Handle and Body）模式，是将抽象部分与他的具体实现部分分离，使它们都可以独立地变化，通过组合的方式建立两个类之间的联系，而不是继承。
 * <p>
 * 桥接（Bridge）模式包含以下主要角色：
 * 抽象化（Abstraction）角色 ：定义抽象类，并包含一个对实现化对象的引用。
 * 扩展抽象化（Refined Abstraction）角色 ：是抽象化角色的子类，实现父类中的业务方法，并通过组合关系调用实现化角色中的业务方法。
 * 实现化（Implementor）角色 ：定义实现化角色的接口，供扩展抽象化角色调用。
 * 具体实现化（Concrete Implementor）角色 ：给出实现化角色接口的具体实现。
 * <p>
 * 适用场景：
 * 在抽象和具体实现之间需要增加更多的灵活性的场景。
 * 一个类存在两个（或多个）独立变化的维度，而这两个（或多个）维度都需要独立进行扩展。
 * 不希望使用继承，或因为多层继承导致系统类的个数剧增。
 * <p>
 * 优点：
 * 分离抽象部分及其具体实现部分。
 * 提高了系统的扩展性。
 * 符合开闭原型。
 * 符合合成复用原则。
 * <p>
 * 缺点：
 * 增加了系统的理解与设计难度。
 * 需要正确地识别系统中两个独立变化的维度。
 *
 * @author ZhangRui
 * @date 2023/03/03 10:44
 **/
public class BridgeMain {

    public static void main(String[] args) {

        OperatingSystem iosSystem = new Ios(new Mp4());
        iosSystem.play("视频.MP4");

        OperatingSystem windowsSystem = new Ios(new Rmvb());
        windowsSystem.play("视频.rmvb");
    }
}
